// 可选属性
// 属性名后加?表示可选
// 场景：某些属性可以有，也可以没有

interface IUser{
    name:string;// 必选属性
    age:number;// 必选属性
    // 可选属性
    gender?:string;
}

const user:IUser={
    name:'孙悟空',
    age:18,
}

// 索引签名

interface IUser2{
    name:string;// 必选属性
    age:number;// 必选属性
    // 索引签名
    [key:string]:any // key 代表动态属性，可以理解为占位符  any 代表属性值是任意类型
}

const user2:IUser2={
    name:'孙悟空',
    age:18,
}

// user2.email 报错 

// 添加索引签名后就不会报错了
user2.email='test@test.com';

let key='hobby'
user2[key]='coding';